// 引入 Pinia 的 defineStore 方法，用于定义状态管理的 store
import { defineStore } from 'pinia'

// 引入后端菜单接口，用于获取动态路由数据
import { useMenuNavApi } from '@/api/sys/menu'

// 引入路由生成函数和常量菜单配置，用于生成动态路由
import { generateRoutes, constantMenu, dashboardMenu } from '@/router'

// 引入 Vue Router 的 RouteRecordRaw 类型，用于定义路由结构
import { RouteRecordRaw } from 'vue-router'

// 定义名为 'routerStore' 的状态管理模块
export const useRouterStore = defineStore('routerStore', {
	// 定义初始状态
	state: () => ({
		// 动态生成的菜单路由数组
		menuRoutes: [] as RouteRecordRaw[],
		// 搜索菜单路由数组
		searchMenu: [] as RouteRecordRaw[],
		// 当前激活的路由数组
		routes: [] as RouteRecordRaw[]
	}),
	// 定义操作方法
	actions: {
		// 异步获取菜单路由的方法
		async getMenuRoutes() {
			// 调用后端接口获取动态路由数据
			const { data } = await useMenuNavApi()
			// 根据后端返回的数据生成动态路由
			const routes = generateRoutes(data)

			// 生成控制台菜单路由
			const dashboardRoutes = generateRoutes(dashboardMenu)
			// 将控制台菜单路由添加到 menuRoutes 中
			this.menuRoutes.push(...dashboardRoutes)

			// 将后端生成的动态路由添加到 menuRoutes 中
			this.menuRoutes.push(...routes)

			// 生成常量菜单路由
			const constantRoutes = generateRoutes(constantMenu)
			// 将常量菜单路由添加到 menuRoutes 中
			this.menuRoutes.push(...constantRoutes)

			// 返回最终的菜单路由数组
			return this.menuRoutes
		},
		// 设置搜索菜单的方法
		setSearchMenu(routers: RouteRecordRaw[]) {
			// 将传入的路由数组赋值给 searchMenu
			this.searchMenu = routers
		},
		// 设置当前激活路由的方法
		setRoutes(routers: RouteRecordRaw[]) {
			// 将传入的路由数组赋值给 routes
			this.routes = routers
		}
	}
})
